package storage

import (
	"fmt"
	"time"
	"skedule-backend/database"
	"skedule-backend/utils"
)

// TaskLog 任务日志结构 (保持与database.TaskLog一致)
type TaskLog = database.TaskLog

// LogStore 日志存储
type LogStore struct{}

var (
	logStore *LogStore
)

// NewLogStore 创建日志存储实例
func NewLogStore() (*LogStore, error) {
	if logStore == nil {
		logStore = &LogStore{}
	}
	return logStore, nil
}

// AddLog 添加日志
func (s *LogStore) AddLog(log *TaskLog) error {
	return database.DB.Create(log).Error
}

// GetLog 获取单个日志
func (s *LogStore) GetLog(id string) (*TaskLog, error) {
	var log TaskLog
	err := database.DB.Where("id = ?", id).First(&log).Error
	if err != nil {
		return nil, fmt.Errorf(utils.T("storage.log.not.found"), id)
	}
	return &log, nil
}

// GetTaskLogs 获取指定任务的所有日志
func (s *LogStore) GetTaskLogs(taskID string) []*TaskLog {
	var taskLogs []*TaskLog
	database.DB.Where("task_id = ?", taskID).Order("start_time DESC").Find(&taskLogs)
	return taskLogs
}

// GetAllLogs 获取所有日志
func (s *LogStore) GetAllLogs() []*TaskLog {
	var logs []*TaskLog
	database.DB.Order("start_time DESC").Find(&logs)
	return logs
}

// CleanOldLogs 清理指定天数前的日志
func (s *LogStore) CleanOldLogs(days int) error {
	cutoff := time.Now().AddDate(0, 0, -days)
	return database.DB.Where("created_at < ?", cutoff).Delete(&TaskLog{}).Error
}

// GetLatestLogs 获取最新的N条日志
func (s *LogStore) GetLatestLogs(limit int) []*TaskLog {
	var logs []*TaskLog
	database.DB.Order("start_time DESC").Limit(limit).Find(&logs)
	return logs
} 